﻿using System;
using System.Collections.Generic;
using Cms.Domain;

namespace Cms.Application.Admin.Views
{
    public interface IEditPageView : IAdminPageView, ITranslatable
    {
        int PageID { get; }

        string CurrentTab { get; }

        int SelectedFolderID { get; set; }

        string Filename { get; set; }

        string Name { get; set; }

        int SelectedMasterTemplateID { get; set; }

        int SelectedDetailTemplateID { get; set; }

        int SelectedLocaleID { get; set; }

        int SelectedVersionID { get; set; }

        string PageTitle { get; set; }

        string PageDescription { get; set; }

        string PageKeywords { get; set; }

        string ListingsTitle { get; set; }

        string ListingsDescription { get; set; }

        string SortKey { get; set; }
        
        string HeadHtml { get; set; }

        string BodyTopHtml { get; set; }

        string BodyBottomHtml { get; set; }
        
        DateTime? StartPublishing { get; set; }

        DateTime? EndPublishing { get; set; }
        
        void SetPageID(int id);
        
        void SetFolders(string domain, IList<Folder> folders);
        
        void SetMasterTemplates(IEnumerable<MasterTemplate> masterTemplates);

        void SetDetailTemplates(IEnumerable<DetailTemplate> detailTemplates);
        
        void SetLocales(IEnumerable<Locale> locales);
        
        void SetVersions(IList<ContentTranslationVersion> versions, int publishedVersionID);

        void SetCategories(
            IList<Category> rootCategories, 
            IList<Category> inheritedCategories,
            IList<Category> categories);

        IEnumerable<Category> GetSelectedCategories();

        void SetAllowedAdministratorGroups(
            IList<AdministratorGroup> availableGroups,
            IList<AdministratorGroup> inheritedGroups, 
            IList<AdministratorGroup> groups);

        IEnumerable<AdministratorGroup> GetSelectedAllowedAdministratorGroups();

        void SetDeniedAdministratorGroups(
            IList<AdministratorGroup> availableGroups,
            IList<AdministratorGroup> inheritedGroups, 
            IList<AdministratorGroup> groups);

        IEnumerable<AdministratorGroup> GetSelectedDeniedAdministratorGroups();

        void SetRequiredUserGroups(
            IList<UserGroup> availableGroups, 
            IList<UserGroup> inheritedGroups,
            IList<UserGroup> selectedGroups, 
            IList<UserGroup> deselectedGroups);

        IEnumerable<UserGroup> GetSelectedRequiredUserGroups();

        IEnumerable<UserGroup> GetDeselectedUserGroups();

        void PublishContentNotAllowed();

        void SetScheduledPublishings(IList<ScheduledPublishing> scheduledPublishings);

        bool ShowCopyFromDefaultLocale { get; set; }
    }
}